解决xlwings多个pid占用多个excel.exe进程,导致打开生成的Excel一片空白 您所在的位置:网站首页 JAVA 操作 正在打开的Excel 解决xlwings多个pid占用多个excel.exe进程,导致打开生成的Excel一片空白

解决xlwings多个pid占用多个excel.exe进程,导致打开生成的Excel一片空白

2024-06-28 23:00| 来源: 网络整理| 查看: 265

近来在搞根据yaml格式的文件,由yaml中输入的内容转换为Excel文件,使用xlwings模块,但是发现最后虽然使用app.kill(),但是还是有多个excel.exe进程占用,最初没有发现原因,使用以下方法解决:

...... # 保存文件并关闭 self.wb.save("xxx.xlsx") self.wb.close() self.app.kill() # 手动终止excel进程 os.system("taskkill /f /im EXCEL.EXE")

但是这样会有一个问题,它会终止正在运行的所有excel进程,如果正在编辑的excel没有保存,就会丢失内容。

解决办法:

后面通过打印app.pid发现多出来不能通过app.kill()终止的进程是由于读取yaml时,我单独创建了一个函数,后面在写入excel的函数中调用,会执行类下的__init__方法,这样就新增了一个app进程。 解决办法就是删除读取yaml的函数,直接写在写入excel的函数中,之后正常通过app.kill()结束就可以了。 如下,将下面

class A: ...... def read_yaml(self): """ 读取yaml文件 """ with open("xxx.yaml", "r") as f: data = f.read() return yaml.load(data, Loader=yaml.Loader) def write_xls(self): """ 写入excel """ conent = A().read_yaml() ...

改为:

class A: ...... def write_xls(self): """ 写入excel """ with open("xxx.yaml", "r") as f: data = f.read() conent = yaml.load(data, Loader=yaml.Loader) ...... ...... # 保存文件并关闭 self.wb.save("xxx.xlsx") self.wb.close() self.app.kill()

其实解决也简单,只是找到是哪里的问题有点麻烦。。。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有